/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package view;

import dao.DAOEnseignant;
import dao.DAOEtudiant;
import dao.DAOPersonne;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import model.Enseignant;
import model.Etudiant;
import model.Personne;
import utils.SaisieUtils;
import utils.TypeUtilisateur;

/**
 *
 * @author Paul
 */
public class Connexion extends HttpServlet {
    public static final String ERROR_MESSAGE = "error";
    public static final String ACCESS_CONNEXION = "view/connexion/connexion.jsp";

    /**
     *
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
         * On recherche l'utilisateur :
         * Si il existe, on le redirige vers la page du menu
         * Sinon on lui remet la page de connexion
         */
        try {
            String login = request.getParameter("pseudo");
            String mdp = request.getParameter("password");
            DAOPersonne daoPers = new DAOPersonne();
            Personne pers = daoPers.rechercheUtilisateur(login, mdp);
            if (pers != null) {
                //Si l'utilisateur a été trouvé
                if (TypeUtilisateur.isTypeOf(pers.getTypeUtilisateur())) {
                    HttpSession session = request.getSession(true);
                    //session.setAttribute("connexion", "Vous êtes connecté : " + pers.getNom() + " " + pers.getPrenom());
                    request.getSession().setAttribute("personne", pers);
                    if (TypeUtilisateur.ENSEIGNANT.getNomTypeUtilisateur().equals(pers.getTypeUtilisateur())) {
                        DAOEnseignant daoEns = new DAOEnseignant();
                        Enseignant e;
                        try {
                            e = daoEns.rechercheProf(login, mdp);
                            if (e != null) {
                                session.setAttribute("enseignant", e);
                                request.getRequestDispatcher("/AdministrationAccueil").forward(request, response);
                            } else {
                                request.setAttribute(ERROR_MESSAGE, "Vous n'êtes pas inscris sur l'application, désolé.");
                                request.getRequestDispatcher(ACCESS_CONNEXION).forward(request, response);
                            }

                        } catch (SQLException ex) {
                            Logger.getLogger(Connexion.class.getName()).log(Level.SEVERE, "Erreur grave : ");
                            request.getRequestDispatcher(ACCESS_CONNEXION).forward(request, response);
                        }
                    } else if (TypeUtilisateur.ETUDIANT.getNomTypeUtilisateur().equals(pers.getTypeUtilisateur())) {
                        DAOEtudiant daoEtud = new DAOEtudiant();
                        Etudiant e;
                        try {
                            e = daoEtud.rechercheEtudiant(login, mdp);
                            session.setAttribute("etudiant", e);
                            request.getRequestDispatcher("/RecapNotes").forward(request, response);
                        } catch (SQLException ex) {
                            Logger.getLogger(Connexion.class.getName()).log(Level.SEVERE, "Erreur grave : ");
                            request.getRequestDispatcher(ACCESS_CONNEXION).forward(request, response);
                        }
                    }
                } else {
                    Logger.getLogger(Connexion.class.getName()).log(Level.SEVERE, "Utilisateur sans type");
                    request.getRequestDispatcher(ACCESS_CONNEXION).forward(request, response);
                }
            } //Si l'utilisateur n'a pas été trouvé
            else {
                //Si les deux champs n'ont pas été rempli
                if (!(SaisieUtils.isNotEmptyLogin(login)) && !(SaisieUtils.isNotEmptyPassword(mdp))) {
                    request.setAttribute(ERROR_MESSAGE, "Veuiller remplir tous les champs.");
                    request.getRequestDispatcher(ACCESS_CONNEXION).forward(request, response);
                } //Sinon un des deux champs n'a pas été rempli OU un des deux champs n'est pas correct
                else {
                    if ((SaisieUtils.isNotEmptyLogin(login)) && !(SaisieUtils.isNotEmptyPassword(mdp))) {
                        request.setAttribute(ERROR_MESSAGE, "Votre mot de passe est vide.");
                        request.getRequestDispatcher(ACCESS_CONNEXION).forward(request, response);
                    } else if ((!SaisieUtils.isNotEmptyLogin(login)) && !(SaisieUtils.isNotEmptyPassword(mdp))) {
                        request.setAttribute(ERROR_MESSAGE, "Votre login est vide.");
                        request.getRequestDispatcher(ACCESS_CONNEXION).forward(request, response);
                    } else {
                        request.setAttribute(ERROR_MESSAGE, "Votre login ou mot de passe est incorrect.");
                        request.getRequestDispatcher(ACCESS_CONNEXION).forward(request, response);
                    }
                }
            }
        } catch (SQLException ex) {
            Logger.getLogger(Connexion.class.getName()).log(Level.SEVERE, "Erreur grave : ");
            request.getRequestDispatcher(ACCESS_CONNEXION).forward(request, response);
        }
    }

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.getServletContext().getRequestDispatcher(ACCESS_CONNEXION);
    }
}
